package com.zengyu.toiusuapplication.api;

import com.zengyu.toiusuapplication.DTO.ApiResponse;
import com.zengyu.toiusuapplication.DTO.ChangePasswordRequest;
import com.zengyu.toiusuapplication.DTO.ChangePasswordResponse;
import com.zengyu.toiusuapplication.DTO.ComplaintSummaryDTO;
import com.zengyu.toiusuapplication.DTO.LoginResponse;
import com.zengyu.toiusuapplication.DTO.PagedResult;
import com.zengyu.toiusuapplication.model.User;
import com.zengyu.toiusuapplication.model.upLoadComplaintURLModel;

import java.util.List;
import java.util.Map;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface ApiService {
    /**
     *  拦截器里面已经配置每次请求都携带Authorization  token去请求，这里接口就不用每次携带请求头了
     */

    @POST("users/register")
    Call<Void> register(@Body User registerRequest);

    @POST("users/login")
    Call<ApiResponse<LoginResponse>> login(@Body User loginRequest);

    @GET("users/info")   // 使用 GET 请求 获取用户登录信息
    Call<User> getUserInfo(
        // @Header("Authorization") String token
    );

    @POST("users/changePassword")  // 使用 POST 请求  修改密码
    Call<ChangePasswordResponse> changePassword(
//       @Header("Authorization") String token,  // 通过 Header 传递 token,使用 @Header 注解来传递 Authorization 头，通常包含 Bearer 前缀和 token
         @Body ChangePasswordRequest request   // 使用 Body 传递请求体,使用 @Body 注解来指定请求体。ChangePasswordRequest 对象将被序列化为 JSON 格式并包含在请求体中。
    );

    @PUT("image/update/{id}")
    Call<upLoadComplaintURLModel> updateComplaints(
            @Path("id") Long id,
            @Body Map<String, Object> body);

    @DELETE("image/delete/{id}")  //根据订单ID删除
    Call<Void> deleteComplaint(
            @Path("id") Long id
    );

    @GET("image/imageButtonSearch_complaint")
    Call<ApiResponse<PagedResult<ComplaintSummaryDTO>>> fetchComplaintSummaries(
            @Query("page") int page,
            @Query("size") int size,
            @Query("orderId") String orderId,
            @Query("cellName") String cellName,
            @Query("startDate") String startDate,
            @Query("endDate") String endDate
    );

    //进行分页查询首页中的摘要标题简短信息,向上滑动也是这个接口
    @GET("image/findSummaryWithNativeSql")
    Call<ApiResponse<PagedResult<ComplaintSummaryDTO>>> getComplaintsByPage(
            @Query("page") int page,
            @Query("size") int size);

    @Multipart
    @POST("image/upload-complaint")
    Call<upLoadComplaintURLModel> uploadComplaintWithImages(
            @Part List<MultipartBody.Part> files,
            @Part("title") RequestBody title,
            @Part("address") RequestBody address,
            @Part("houseaddress") RequestBody houseaddress,
            @Part("scene") RequestBody scene,
            @Part("cellName") RequestBody cellName,
            @Part("latitudeLongitude") RequestBody latitudeLongitude,
            @Part("networkMode") RequestBody networkMode,
            @Part("network4GLevel") RequestBody network4GLevel,
            @Part("userIssue") RequestBody userIssue,
            @Part("duration") RequestBody duration,
            @Part("userEmotion") RequestBody userEmotion,
            @Part("backup") RequestBody backup,
            @Part("classificationLabel") RequestBody classificationLabel
    );


    // 根据id进行查看所有字段的详情
    @GET("image/{id}")
    Call<ResponseBody> getComplaintbyId( // 根据id订单查询
             @Path("id") Long id
    );

    // 根据id进行编辑回显查看。
    @GET("image/{id}")
    Call<upLoadComplaintURLModel> getEditFeedback(
            @Path("id") Long id
    );

}
